package model

import (
	"time"
)

// Server 定义服务器表的模型
type Server struct {
	ID                 int64     `gorm:"primaryKey;autoIncrement;comment:自增ID" json:"id"`
	Hostname           string    `gorm:"type:varchar(128);not null;comment:机器主机名" json:"hostname"`
	SN                 string    `gorm:"type:varchar(128);not null;comment:SN" json:"sn"`
	IP                 string    `gorm:"type:varchar(128);not null;comment:IP" json:"ip"`
	Env                string    `gorm:"type:varchar(12);not null;comment:环境 DEV | PRO" json:"env"`
	Specification      string    `gorm:"type:varchar(128);not null;comment:服务器规格族，比如ecs.s2.large、ecs.s3.xlarge" json:"specification"`
	CPU                int       `gorm:"not null;comment:CPU" json:"cpu"`
	Memory             int       `gorm:"not null;comment:内存(GB)" json:"memory"`
	SystemDiskType     string    `gorm:"type:varchar(32);not null;comment:系统盘类型" json:"system_disk_type"`
	SystemDiskSize     int       `gorm:"not null;comment:系统盘大小(GB)" json:"system_disk_size"`
	DataDiskType       string    `gorm:"type:varchar(32);not null;comment:数据盘类型" json:"data_disk_type"`
	DataDiskSize       int       `gorm:"not null;comment:数据盘大小(GB)" json:"data_disk_size"`
	OS                 string    `gorm:"type:varchar(32);not null;comment:操作系统: Windows | Linux" json:"os"`
	OSVersion          string    `gorm:"type:varchar(64);not null;comment:操作系统版本: Windows11 | Centos7" json:"os_version"`
	ServerManufacturer string    `gorm:"type:varchar(32);not null;comment:服务器厂商：Aliyun | Tencent | IBM" json:"server_manufacturer"`
	DeployType         string    `gorm:"type:varchar(12);not null;comment:部署类型，RDS | ECS | IDC" json:"deploy_type"`
	Region             string    `gorm:"type:varchar(32);not null;comment:地域, 例如 cn-hangzhou | cn-beijing" json:"region"`
	Zone               string    `gorm:"type:varchar(64);not null;comment:可用区：cn-hangzhou-a" json:"zone"`
	DBType             string    `gorm:"type:varchar(32);comment:使用类型 PostgreSQL | MySQL" json:"db_type"`
	Status             string    `gorm:"type:varchar(12);not null;default:online;comment:状态，online/offline/discard" json:"status"`
	Remark             string    `gorm:"type:varchar(255);comment:备注/标签" json:"remark"`
	CreateTime         time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime         time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
	IsDelete           bool      `gorm:"type:tinyint(1);default:false;comment:逻辑删除标记，FALSE表示未删除，TRUE表示已删除" json:"is_delete"`
}

// TableName 指定表名
func (Server) TableName() string {
	return "server"
}

type ServerListRequest struct {
	Hostname string `form:"hostname" json:"hostname"`
	IP       string `form:"ip" json:"ip"`
	Env      string `form:"env" json:"env"`
	DBType   string `form:"db_type" json:"db_type"`
	Search   string `json:"search"`
	Page     int64  `form:"page" json:"page" default:"1"`
	PageSize int64  `form:"page_size" json:"page_size" default:"10"`
}

type ServerListResponse struct {
	Count    uint64    `json:"count"`
	Records  []*Server `json:"records"`
	Page     int64     `json:"page"`
	PageSize int64     `json:"page_size"`
}
